Web 剪切板 API
Clipboard API 异步剪切板 API
剪贴板允许以与 MIME 类型相关联的多种表示形式存储信息,从而为这两种用例提供服务。W3C 剪贴板规范规定,在写入和读取剪贴板时,必须支持这三种数据类型:
text/plain
表示纯文本。-
text/html
表示 HTML。 image/png
用于 PNG 图像。
通过异步剪贴板应用程序接口的 read
方法读取特定表示方法:
const items = await navigator.clipboard.read();
for(let item of items) {
if (item.types.includes("text/html")) {
const blob = await item.getType("text/html");
const html = await blob.text();
} else if (item.types.includes("text/plain")) {
const blob = await item.getType("text/plain");
const text = await blob.text();
} else if (item.types.includes("image/png")) {
const blob = await item.getType("image/png");
const image = await blob.arrayBuffer();
}
}
通过异步剪贴板应用程序接口的 write
方法写入特定表示方法:
const htmlBlob = new Blob(["<h1>Hello, world!</h1>"], {type: "text/html"});
const textBlob = new Blob(["Hello, world!"], {type: "text/plain"});
const imageBlob = new Blob([new Uint8Array([0, 1, 2, 3])], {type: "image/png"});
await navigator.clipboard.write([new ClipboardItem({ "text/html": htmlBlob })]);
await navigator.clipboard.write([new ClipboardItem({ "text/plain": textBlob })]);
await navigator.clipboard.write([new ClipboardItem({ "image/png": imageBlob })]);
// const clipboardItem = new ClipboardItem({
// "text/html": htmlBlob,
// "text/plain": textBlob,
// "image/png": imageBlob
// });
// await navigator.clipboard.write([clipboardItem]);
Clipboard Events API 剪切板事件 API
监听 copy
事件,阻止默认行为,然后使用 setData
方法设置剪切板数据:
document.addEventListener("copy", (e) => {
e.preventDefault(); // Prevent default copy behavior
e.clipboardData.setData("text/plain", "Hello, world");
e.clipboardData.setData("text/html", "Hello, <em>world</em>");
e.clipboardData.setData("image/png", new Blob([new Uint8Array([0, 1, 2, 3])]));
});